package com.ruoyi.management.base.response;

import com.github.pagehelper.PageInfo;
import com.ruoyi.common.constant.HttpStatus;
import com.ruoyi.common.core.page.TableDataInfo;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.util.List;

@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor

/*
  用于表示API请求结果的类，封装了状态码、消息和数据
 */
public class JsonResult {

    // 状态码
    private Integer code;
    // 消息
    private String msg;
    // 数据
    private Object data;

    /**
     * 构造函数，用于创建带有状态码和消息的JsonResult对象
     *
     * @param code 状态码
     * @param message 消息
     */
    public JsonResult(Integer code, String message) {
        this.code = code;
        this.msg = message;
    }

    /**
     * 构造函数，用于创建带有StatusCode枚举的JsonResult对象
     *
     * @param statusCode 包含状态码和消息的枚举对象
     */
    public JsonResult(StatusCode statusCode) {
        this.code = statusCode.getCode();
        this.msg = statusCode.getMessage();
    }

    /**
     * 构造函数，用于创建带有StatusCode枚举和数据的JsonResult对象
     *
     * @param statusCode 包含状态码和消息的枚举对象
     * @param data 响应数据
     */
    public JsonResult(StatusCode statusCode, Object data) {
        this.code = statusCode.getCode();
        this.msg = statusCode.getMessage();
        this.data = data;
    }

    /**
     * 构造函数，用于创建成功状态的JsonResult对象，默认状态码和消息为成功
     *
     * @param data 响应数据
     */
    public JsonResult(Object data) {
        this.code = StatusCode.SUCCESS.getCode();
        this.msg = StatusCode.SUCCESS.getMessage();
        this.data = data;
    }


    public JsonResult(String message, Object data) {
        this.code = StatusCode.SUCCESS.getCode(); // 默认成功状态码
        this.msg = message;
        this.data = data;
    }
    /**
     * 创建一个成功状态的JsonResult对象
     *
     * @param data 响应数据
     * @return JsonResult对象
     */
    public static JsonResult ok(Object data){
        return new JsonResult(data);
    }

    /**
     * 创建一个成功状态的JsonResult对象，不包含任何数据
     *
     * @return JsonResult对象
     */
    public static JsonResult ok(){
        return ok(null);
    }

    public static JsonResult oko(String message){
        return new JsonResult(message);
    }

    public static JsonResult oko(String message,Object data){
        return new JsonResult(message,data);
    }

    public static JsonResult fail(String message){
        return new JsonResult(message);
    }

}